home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / conhlp03 / padp_src / console.c < prev    next >
C/C++ Source or Header  |  1994-11-28  |  1KB  |  85 lines

  1. /*
  2.     console.c
  3.     tab=8
  4.     コンソールBIOS
  5.     int 91h
  6.     1994/11/23 1994/11/26
  7.     参考: list.asm
  8.           FreeSoftWaerCollection5 \ms_dos\r_gralib\r_gralib.asm
  9.           赤本に載ってない
  10.     注意: エラー対策無し
  11. */
  12.  
  13. #include <dos.h>
  14.  
  15. #define ON 1
  16. #define OFF 0
  17.  
  18.  
  19. /*
  20.     cur( OFF );        保存 & 消去
  21.     cur( ON );        元に戻す
  22. */
  23.  
  24. int cur( unsigned char sw ){        /* カーソルのオンオフ */
  25.  
  26.     union REGS in,out;
  27.     static char c=0; /* カーソル状態保存 */
  28.  
  29.     if( sw == OFF ){
  30.         in.h.ah = 0x0c;
  31.         int86( 0x91,&in,&out );
  32.         c = out.h.al;
  33.         in.h.al = 1;
  34.     }else{
  35.         in.h.al = c;
  36.     }
  37.     in.h.ah = 0x0b;
  38.     int86( 0x91,&in,&out );
  39.     return c;
  40. }
  41.  
  42.  
  43. /*
  44.     width( [0|20|25] )    表示行数変更
  45.     0:画面消去のみ
  46.     戻り値は設定行数
  47.     20行のときゴミが出ることがある
  48. */
  49.  
  50. #include <stdio.h>
  51. #include <stdlib.h>
  52. int width( unsigned char sw ){
  53.  
  54.     union REGS in,out;
  55.     int r;
  56.     
  57.     if( sw != 0 && sw != 20 && sw != 25 ){
  58.         fputs("\x1b[31;7m argument error. \x1b[m",stderr);
  59.         exit(1);
  60.     }
  61.  
  62.     /* 画面状態の取得 */
  63.     in.h.ah = 0x04;
  64.     int86(0x91,&in,&out);
  65.  
  66.     /* 画面状態の設定 */
  67.     in.h.ah = 0x03;
  68.     in.h.dl = out.h.dl;        /* 幅はそのまま */
  69.     if( out.h.dh == 25 && sw == 20 ){
  70.         in.h.dh = 20;        /* 20行 */
  71.         int86(0x91,&in,&out);
  72.     }
  73.     if( out.h.dh == 20 && sw == 25 ){
  74.         in.h.dh = 25;        /* 25行 */
  75.         int86(0x91,&in,&out);
  76.     }
  77.     r = out.h.dh;
  78.     /* 全画面消去 */
  79.     if( sw == 0 ){
  80.         in.h.ah = 0x02;
  81.         int86(0x91,&in,&out);
  82.     }
  83.     return r;
  84. }
  85.